(function() {
	tinymce.create('tinymce.plugins.cpTagPlugin', {
		init : function(ed, url) {
			
			var t = this;

			t.editor = ed;

			// Register commands
			ed.addCommand('cpTag', function() {
				
				var se = ed.selection;
				t._definirTag();
				
			}, t);
			
			// Register buttons
			ed.addButton('cpTag', {title : 'Definir tag', cmd : 'cpTag', image:'js/tinymce/plugins/cptag/tag-add.png'});
			
			ed.onNodeChange.add(function(ed, cm, n, co) {
				cm.setDisabled('cpTag', (co && !(n.nodeName == 'A' && n.className == 'tag')) || (n.nodeName == 'A' && n.className != 'tag'));
				cm.setActive('cpTag', n.nodeName == 'A' && n.className == 'tag');
			});
			
		},

		getInfo : function() {
			return {
				longname : 'Tag Clicpage',
				author : 'Francois - Clicpage',
				authorurl : 'http://www.clicpage.net',
				infourl : 'http://www.clicpage.net',
				version : '1.0'
			};
		},
		
		_definirTag : function() {

			var ed = this.editor;
			var elm = ed.selection.getNode();

			elm = ed.dom.getParent(elm, "A");

			if(elm != null && elm.nodeName == 'A' && elm.className == 'tag')
			{
				// Retirer le tag
				ed.execCommand("mceBeginUndoLevel");
				i = ed.selection.getBookmark();
				ed.dom.remove(elm, 1);
				ed.selection.moveToBookmark(i);
				ed.execCommand("mceEndUndoLevel");
			}
			else
			{
				
				// Insérer le tag
				ed.execCommand("mceBeginUndoLevel");
				
				var tag_texte = ed.selection.getContent({format:'text'});
				
				ed.getDoc().execCommand("unlink", false, null);
				ed.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
				
				elementArray = tinymce.grep(ed.dom.select("a"), function(n) {return ed.dom.getAttrib(n, 'href') == '#mce_temp_url#';});
				
				if(elementArray.length != 1) {
					ed.execCommand("mceEndUndoLevel");	
					ed.undoManager.undo();
					alert('Vous devez sélectionner un mot ou un groupe de mots à définir comme tag.');
					return;
				}
				
				cpModifierPage.ajouterTag(tag_texte, false, function(erreur, reponse) {
					if(!erreur || $('code', reponse).text() == 102) {
						ed.dom.setAttrib(elementArray[0], 'href', urlTags+','+$('tag_texte', reponse).text());
						ed.dom.setAttrib(elementArray[0], 'class', 'tag');
						ed.execCommand("mceEndUndoLevel");	
					} else {
						ed.execCommand("mceEndUndoLevel");	
						ed.undoManager.undo();
					}
				});
				
			}
			
			return;
		
		}
		
	});

	// Register plugin
	tinymce.PluginManager.add('cpTag', tinymce.plugins.cpTagPlugin);
	
})();